/**
 * 
 */
package ec.gob.magap.era.web.controller;

import java.math.BigDecimal;
import java.util.ArrayList;
import java.util.List;

import javax.annotation.PostConstruct;
import javax.ejb.EJB;
import javax.ejb.Stateless;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.ViewScoped;
import javax.faces.event.ValueChangeEvent;
import javax.faces.model.SelectItem;
import javax.servlet.http.HttpSession;

import ec.gob.magap.era.entities.Canton;
import ec.gob.magap.era.entities.Catalogo;
import ec.gob.magap.era.entities.Provincia;
import ec.gob.magap.era.entities.Region;
import ec.gob.magap.era.entities.Usuario;
import ec.gob.magap.era.exceptions.ServicioException;
import ec.gob.magap.era.servicios.interfaces.CatalogoService;
import ec.gob.magap.era.servicios.interfaces.CoordinadorServicio;
import ec.gob.magap.era.web.general.Utilidades;

/**
 * @author Javier
 *
 */
@ViewScoped
@ManagedBean
public class DatosCoordinadorController extends BasicoController {

	/**
	 * 
	 */
	
	private static final long serialVersionUID = 7046753390245553967L;
	
	private List<Usuario> listaUsuarios;
	
	private Usuario usuarioLogueado;
	
	private Usuario usuarioSeleccionado;
	
	private List<SelectItem> nacionalidades;
	
	private List<Canton> cantones;
	
	private List<Canton> ciudades;
	
	private List<SelectItem> operadoras;
	
	private List<Region> regiones;
	
	private List<Provincia> provincias;
	
	private SelectItem itemSeleccionado;
	
	private String regionSeleccionada;
	
	private String provinciaSeleccionada;
	
	private String ciudadSeleccionada;
	
	private String cantonSeleccionado;
	
	/**
	 * @return the regionSeleccionada
	 */
	public String getRegionSeleccionada() {
		return regionSeleccionada;
	}
	/**
	 * @param regionSeleccionada the regionSeleccionada to set
	 */
	public void setRegionSeleccionada(String regionSeleccionada) {
		this.regionSeleccionada = regionSeleccionada;
	}
	/**
	 * @return the provinciaSeleccionada
	 */
	public String getProvinciaSeleccionada() {
		return provinciaSeleccionada;
	}
	/**
	 * @param provinciaSeleccionada the provinciaSeleccionada to set
	 */
	public void setProvinciaSeleccionada(String provinciaSeleccionada) {
		this.provinciaSeleccionada = provinciaSeleccionada;
	}
	@EJB(name = "CoordinadorServicio")
	private CoordinadorServicio coordinadorServicio;
	
	@EJB(name = "CatalogoServicio")
	private CatalogoService catalogoServicio;
	
	@PostConstruct
    public void postContruct() {
		
		
			
		
		HttpSession session = Utilidades.getSession();
			
		usuarioLogueado = (Usuario) session.getAttribute("UsuarioLogeado");
		
		ConsultarUsuarios();
		CargarNacionalidades();
		CargarOperadoras();
		CargarRegiones();
		CargarCiudades();
		
    }
	public void  regionChanged(ValueChangeEvent e){
	
		BigDecimal region= BigDecimal.valueOf(Double.parseDouble(e.getNewValue().toString()));
		CargarProvincias(region);
		
		
	}
	
	public void  provinciaChanged(ValueChangeEvent e){
		
		BigDecimal provincia= BigDecimal.valueOf(Double.parseDouble(e.getNewValue().toString()));
		CargarCantones(provincia);
		
		
	}
	
	private void CargarCiudades(){
		try {
		
			ciudades= catalogoServicio.ConsultarCantonesTodos();
		} catch (ServicioException e) {
			
			e.printStackTrace();
		}
	}
	
	private void CargarRegiones(){
		try {
			regiones= catalogoServicio.ConsultarRegiones();
		} catch (ServicioException e) {
			
			e.printStackTrace();
		}
	}
	private void CargarProvincias(BigDecimal region){
		try {
			
			provincias =  catalogoServicio.ConsultarProvincias(region);
			
		} catch (ServicioException e) {
			
			e.printStackTrace();
		}
	}
	
	private void CargarCantones(BigDecimal provincia){
		try {
			
			cantones =  catalogoServicio.ConsultarCantones(provincia);
//			provincias = new ArrayList<SelectItem>();
//			for (Canton catalogo : catalogoCantones) {
//				SelectItem item = new SelectItem();
//				item.setValue(catalogo.getId());
//				item.setLabel(catalogo.getDescripcion());
//				ciudades.add(item);
//			}
//			ciudades.add(0, new SelectItem("", "[Selecciona la Ciudad]"));
			
		} catch (ServicioException e) {
			
			e.printStackTrace();
		}
	}

	private void CargarNacionalidades(){
		try {
			List<Catalogo> catalogoNacionalidades =  catalogoServicio.ConsultarCatalogo(2);
			nacionalidades = new ArrayList<SelectItem>();
			for (Catalogo catalogo : catalogoNacionalidades) {
				SelectItem item = new SelectItem();
				item.setValue(catalogo.getId());
				item.setLabel(catalogo.getDescripcion());
				nacionalidades.add(item);
			}
			nacionalidades.add(0, new SelectItem("", "[Selecciona la Nacionalidad]"));
		} catch (ServicioException e) {
			
			e.printStackTrace();
		}
	}

	private void CargarOperadoras(){
		try {
			List<Catalogo> catalogoOperadoras =  catalogoServicio.ConsultarCatalogo(1);
			operadoras = new ArrayList<SelectItem>();
			for (Catalogo catalogo : catalogoOperadoras) {
				SelectItem item = new SelectItem();
				item.setValue(catalogo.getId());
				item.setLabel(catalogo.getDescripcion());
				operadoras.add(item);
			}
			operadoras.add(0, new SelectItem("", "[Selecciona la Operadora]"));
		} catch (ServicioException e) {
			
			e.printStackTrace();
		}
	}

	private void ConsultarUsuarios() {
		try {
			listaUsuarios = coordinadorServicio.consultarUsuarios(usuarioLogueado);
		} catch (Exception e) {
			
			e.printStackTrace();
		}
	}
	
	/**
	 * @return the listaUsuarios
	 */
	
	public List<Usuario> getListaUsuarios() {
		return listaUsuarios;
	}

	/**
	 * @param listaUsuarios the listaUsuarios to set
	 */
	public void setListaUsuarios(List<Usuario> listaUsuarios) {
		this.listaUsuarios = listaUsuarios;
	}

	/**
	 * @return the usuarioLogueado
	 */
	public Usuario getUsuarioLogueado() {
		return usuarioLogueado;
	}

	/**
	 * @param usuarioLogueado the usuarioLogueado to set
	 */
	public void setUsuarioLogueado(Usuario usuarioLogueado) {
		this.usuarioLogueado = usuarioLogueado;
	}

	/**
	 * @return the usuarioSeleccionado
	 */
	public Usuario getUsuarioSeleccionado() {
		return usuarioSeleccionado;
	}

	/**
	 * @param usuarioSeleccionado the usuarioSeleccionado to set
	 */
	public void setUsuarioSeleccionado(Usuario usuarioSeleccionado) {
		this.usuarioSeleccionado = usuarioSeleccionado;
	}

	/**
	 * @return the nacionalidades
	 */
	public List<SelectItem> getNacionalidades() {
		return nacionalidades;
	}

	/**
	 * @param nacionalidades the nacionalidades to set
	 */
	public void setNacionalidades(List<SelectItem> nacionalidades) {
		this.nacionalidades = nacionalidades;
	}

	/**
	 * @return the ciudades
	 */
	public List<Canton> getCantones() {
		return cantones;
	}

	/**
	 * @param ciudades the ciudades to set
	 */
	public void setCantones(List<Canton> cantones) {
		this.cantones = cantones;
	}

	/**
	 * @return the itemSeleccionado
	 */
	public SelectItem getItemSeleccionado() {
		return itemSeleccionado;
	}

	/**
	 * @param itemSeleccionado the itemSeleccionado to set
	 */
	public void setItemSeleccionado(SelectItem itemSeleccionado) {
		this.itemSeleccionado = itemSeleccionado;
	}

	/**
	 * @return the operadoras
	 */
	public List<SelectItem> getOperadoras() {
		return operadoras;
	}

	/**
	 * @param operadoras the operadoras to set
	 */
	public void setOperadoras(List<SelectItem> operadoras) {
		this.operadoras = operadoras;
	}
	public String agregarEstudio()
	{
		
		return "";
	
	}
	public String editarEstudio()
	{
		
		return "";
	
	}
	public String eliminarEstudio()
	{
		
		return "";
	
	}

	/**
	 * @return the regiones
	 */
	public List<Region> getRegiones() {
		return regiones;
	}

	/**
	 * @param regiones the regiones to set
	 */
	public void setRegiones(List<Region> regiones) {
		this.regiones = regiones;
	}

	/**
	 * @return the provincias
	 */
	public List<Provincia> getProvincias() {
		return provincias;
	}

	/**
	 * @param provincias the provincias to set
	 */
	public void setProvincias(List<Provincia> provincias) {
		this.provincias = provincias;
	}
	/**
	 * @return the ciudadSeleccionada
	 */
	public String getCiudadSeleccionada() {
		return ciudadSeleccionada;
	}
	/**
	 * @param ciudadSeleccionada the ciudadSeleccionada to set
	 */
	public void setCiudadSeleccionada(String ciudadSeleccionada) {
		this.ciudadSeleccionada = ciudadSeleccionada;
	}
	/**
	 * @return the cantonSeleccionado
	 */
	public String getCantonSeleccionado() {
		return cantonSeleccionado;
	}
	/**
	 * @param cantonSeleccionado the cantonSeleccionado to set
	 */
	public void setCantonSeleccionado(String cantonSeleccionado) {
		this.cantonSeleccionado = cantonSeleccionado;
	}
	/**
	 * @return the ciudades
	 */
	public List<Canton> getCiudades() {
		return ciudades;
	}
	/**
	 * @param ciudades the ciudades to set
	 */
	public void setCiudades(List<Canton> ciudades) {
		this.ciudades = ciudades;
	}
	
	
	
}
